﻿#ifndef LEVEL_H
#define LEVEL_H

/*! \class Level
 *  \brief     Classe do tipo \c Level.
 *  \details   Esta classe gerencia os pontos do jogo e o avanço de níveis de dificuldade.
 *  \author    Ghybson
 *  \author    Luís
 *  \author    Willian
 *  \version   0.1
 *  \date      2011
 *  \copyright GNU Public License.
 *  \todo      A pontuação e o avanço de níveis é "injusto" para
 *             jogadores que arriscam mais para completar
 *             mais linhas ao mesmo tempo.
 */

class Level
{
public:
    /*! \fn  Level()
     *  \brief  Construtor padrão classe \c Level.
     */
    Level();
    /*! \fn  ~Level()
     *  \brief  Destrutor padrão classe \c Level.
     */
    ~Level();
    /*! \fn  int getLevelValue()
     *  \brief  Função membro pública da classe \c Level para obter o valor inteiro do level atual.
     *  \return Retorna o inteiro \a m_LevelValue.
     */
    int getLevelValue() const {return m_LevelValue;}
    /*! \fn  int getScoreNovaPeca()
     *  \brief  Função membro pública da classe \c Level para obter o score do round correspondente ao level atual (\a m_LevelValue).
     *  \return Retorna o inteiro \a m_LevelValue * 10.
     */
    int getScoreNovaPeca() const {return m_LevelValue*10;}
    /*! \fn  int getScoreLinhaCompleta()
     *  \brief  Função membro pública da classe \c Level para obter o score correspondente ao level atual (\a m_LevelValue) quando uma linha é completada.
     *  \return Retorna o inteiro \a m_LevelValue * 50.
     */
    int getScoreLinhaCompleta() const {return m_LevelValue*50;}
    /*! \fn  int getScoreBonus()
     *  \brief  Função membro pública da classe \c Level para obter o score do round correspondente ao level atual (\a m_LevelValue) quando o tabuleiro fica completamente vazio.
     *  \return Retorna o inteiro \a m_LevelValue * \a m_LevelValue * \a m_LevelValue * 1000.
     */
    int getScoreBonus() const {return m_LevelValue*m_LevelValue*m_LevelValue*1000;}
    /*! \fn  int getScoreToNextLevel()
     *  \brief  Função membro pública da classe \c Level para obter o score necessário para passar de level.
     *  \return Retorna o inteiro \a m_LevelValue * \a m_LevelValue * 150.
     */
    int getScoreToNextLevel() const {return 150*m_LevelValue*m_LevelValue;}
    /*! \fn  int getTimer()
     *  \brief  Função membro pública da classe \c Level para obter o intervalo de tempo para o movimento de \a Board::m_PecaAtual dependendo do valor de \a m_LevelValue.
     *  \return Retorna um inteiro entre 100 e 1000 representando um intervalo de tempo em milisegundos.
     */
    int getTimer() const;
    /*! \fn  int setLevel()
     *  \param[in] novoLevel Inteiro que será colocado como valor para \a m_LevelValue.
     *  \brief  Função membro pública da classe \c Level para modificar o valor de \a m_LevelValue.
     */
    void setLevel(int novoLevel){m_LevelValue = novoLevel;}
private:
    int m_LevelValue;   /*!< O valor inteiro do level atual do jogo */
};

#endif // SCORE_H
